package org.opens.mybatisplus.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import lombok.experimental.FieldNameConstants;
import org.opens.mybatisplus.serialize.DateSerialize;
import org.opens.mybatisplus.serialize.DateSerializeTwo;
import org.opens.mybatisplus.serialize.DoubleSerialize;

import java.util.Date;

@Data
@TableName(value = "user_money")
@FieldNameConstants
public class FormatPojo {

    /*
     * 降低DO中的字段和程序耦合性太高这个问题的解决办法:
     *   1. 给每一个字段添加静态常量用来容纳字段名称, 这样即使后面更改, 只要不更改这个静态常量的名称就可以了:
     *       代码: public static final String COLUMN_ID = "id";
     *       -问题
     *           如果一个DO有上百个字段时呢? 就会造成非常大的工作效率影响.
     *   2. 使用lombok的注解@FieldNameConstants, 使用这个注解之后, 就会自动将当前DO下的属性名起静态变量进行保存.
     *      -实例
     *          请查看: org.opens.javaskill.lombok.Decoupling.test1.
     */

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    @TableField(value = "name")
    private String name;

    @TableField(value = "money")
    @JsonSerialize(using = DoubleSerialize.class)
    private Double money;

    @TableField(value = "start_time")
    @JsonSerialize(using = DateSerialize.class)
    private Date startTime;

    @TableField(value = "end_time")
    @JsonSerialize(using = DateSerializeTwo.class)
    private Date endTime;

}
